/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formula.one.urjc.dueño.controlador;

import formula.one.urjc.Metodos;
import formula.one.urjc.circuito.Circuito;
import formula.one.urjc.dueño.view.VentanaDueñoEntreno;
import formula.one.urjc.dueño.view.ventanaAviso;
import formula.one.urjc.escuderia.Escuderia;
import formula.one.urjc.piloto.Piloto;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

/**
 *
 * @author javier
 */
public class DueñoEscuderiaEntrenoControlador implements ActionListener{
    private VentanaDueñoEntreno vista;
    private Metodos modelo;
    private Escuderia escuderia;
    private ArrayList<Circuito> circuitosList;
    
    public DueñoEscuderiaEntrenoControlador(Metodos modelo, Escuderia escuderia) {
        this.modelo = modelo;
        this.escuderia = escuderia;
        this.vista=new VentanaDueñoEntreno();
        circuitosList=new ArrayList<Circuito>();
         //añado las accines a los botones del formulario
        vista.getjBtEntreno().addActionListener(this);
    }
    
    public VentanaDueñoEntreno mostrarPantalla(){
        //aplico las propiedades a la vantana
        //que no se pueda cambiar el tamaño
        vista.setResizable(false);
        // que se muestre
        vista.setVisible(true);
        //cargo los datos de la escuderias correspondiente
        cargarDatosEscuderia();
       
        return vista;
        
    }
     private void cargarDatosEscuderia() {
       vista.getModelListPOfic().clear();
       cargarPilotosOfic();
       
       vista.getModelListPProb().clear();
       cargarPilotosProb();
       
       vista.getModelListCoche().clear();
       cargarCoches();
       
       circuitosList.clear();
       vista.getModelListCircuito().clear();
       cargarCircuito();
       
       vista.getjTextPresupuesto().setText(String.format("%.1f",escuderia.getPresupuesto()));
    }
    private void cargarPilotosOfic() {
        for(int i=0;i<escuderia.getPilotosOficiales().size();i++){
            vista.getModelListPOfic().addElement(escuderia.getPilotosOficiales().get(i).resumeToString());
        }
            vista.getjListPilOfic().setModel(vista.getModelListPOfic());
            
    }
    
    private void cargarPilotosProb() {
        //cargo los pilotos probadores
        for(int i=0;i<escuderia.getPilotosProbadores().size();i++){
                vista.getModelListPProb().addElement(escuderia.getPilotosProbadores().get(i).resumeToString());
            }
         vista.getjListPilProb().setModel(vista.getModelListPProb());
    }
    
    private void cargarCoches() {
       for(int i=0;i<escuderia.getCoches().length;i++){
           //si existe el coche
           if(escuderia.getCoches()[i]!=null){
              vista.getModelListCoche().addElement(escuderia.getCoches()[i].resumeToString());
           }
       }
      
       vista.getjListCoch().setModel(vista.getModelListCoche());
    }
    
     private void cargarCircuito() {
        ArrayList<Object> cL=modelo.getCircuitoList();
        for(int i=0;i<cL.size();i++){
            circuitosList.add((Circuito)cL.get(i));
            vista.getModelListCircuito().addElement(((Circuito)cL.get(i)).resumeToString());
        }
        vista.getjListCircuit().setModel(vista.getModelListCircuito());
    }

     private int comprobarSeleccion() {
        int res=-1;
        //si coches y circuito están seeleccionados
        if(!vista.getjListCircuit().isSelectionEmpty() && !vista.getjListCoch().isSelectionEmpty()){
            if(!vista.getjListPilOfic().isSelectionEmpty() && vista.getjListPilProb().isSelectionEmpty()){
                res=0;
            }else if(vista.getjListPilOfic().isSelectionEmpty() && !vista.getjListPilProb().isSelectionEmpty()){
                res=1;
            }
        }
        return res;
    }
    //método que devuelve una cadena con la mejora de los pilotos y los coches
    //le paso el parametro piloto por comodidad
    private String getInfoEntreno(Piloto p){
        String info="";
        //int i=vista.getjListCircuit().gets;
        String nombreCircuito=circuitosList.get(vista.getjListCircuit().getSelectedIndex()).getNombre();
        info+="Entrenamiento realizado en "+nombreCircuito+"\n";
        info+="Valoración final piloto "+p.getNombre()+":\n";
        info+="Agresividad: "+String.format("%.1f",p.getCaracteristicasTecnicas().getAgresividad())+"\n";
        info+="Paciencia: "+String.format("%.1f",p.getCaracteristicasTecnicas().getPaciencia())+"\n";
        info+="Reflejos: "+String.format("%.1f",p.getCaracteristicasTecnicas().getReflejos())+"\n";
        info+="valentia: "+String.format("%.1f",p.getCaracteristicasTecnicas().getValentia())+"\n";
        info+="Valoración final Coche "+ escuderia.getCoches()[vista.getjListCoch().getSelectedIndex()].getModelo()+":\n";
        info+="Aerodinámica: "+ String.format("%.1f",escuderia.getCoches()[vista.getjListCoch().getSelectedIndex()].getCualidades().getAerodinamica())+"\n";
        info+="Potencia: "+ String.format("%.1f",escuderia.getCoches()[vista.getjListCoch().getSelectedIndex()].getCualidades().getPotencia())+"\n";
        info+="Ruedas: "+ String.format("%.1f",escuderia.getCoches()[vista.getjListCoch().getSelectedIndex()].getCualidades().getRuedas());
        return info;
    }
    @Override
    public void actionPerformed(ActionEvent ae) {
       
        if(vista.getjBtEntreno()==ae.getSource()){
            int cS=comprobarSeleccion();
            if(cS>-1){
                Piloto p=null;
                //Si es un piloto Oficial
                if(cS ==0){
                   p=escuderia.getPilotosOficiales().get(vista.getjListPilOfic().getSelectedIndex());
                }else if(cS==1){
                   p=escuderia.getPilotosProbadores().get(vista.getjListPilProb().getSelectedIndex());  
                }
                 //le paso el circuito seleccionado
                 boolean res=escuderia.darVueltaEntrenamiento(circuitosList.get(vista.getjListCircuit().getSelectedIndex()), 
                            //el piloto seleccionado
                            p, 
                            //el coche seleccionado
                            escuderia.getCoches()[vista.getjListCoch().getSelectedIndex()]);
                if(res){
                    //grabo los cambios
                    modelo.modificarEscuderia(escuderia);
                   //muestro información
                    ventanaAviso.mostrarInfo(vista, getInfoEntreno(p), "Info entreno");
                    cargarDatosEscuderia();
                }else{
                    ventanaAviso.mostrarError(vista, "No hay presupuesto para pagar el canón del circuito", "Error Entrenamiento");
                }
            }else{
                ventanaAviso.mostrarError(vista, "Debe de seleccionar un único Piloto, un Coche y un circuito para entrenar", "Error Entrenamiento");
            }
           
        }
    }

    

   
    

    

    
    

   
    
}
